package com.gmgx.service.impl;

import com.gmgx.dao.IUserDao;
import com.gmgx.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import javax.transaction.Transactional;

@Service
public class UserServiceImpl  implements IUserService {

    @Autowired
    private IUserDao userDao;

    /**
     * @param deductionId 扣款人id
     * @param collectId   收款人id
     * @param money       金额
     * @return
     */
    @Override
    @Transactional
    public boolean transferAccounts(Integer deductionId, Integer collectId, double money) {
        try{
            // 扣钱
            Boolean flag1 = userDao.modifyMoney(deductionId, -money);
            System.out.println(flag1);

            System.out.println(1/0);  // 如果涉及到异常（在没捕获的情况下），事务启动 回滚机制

            // 加钱
            Boolean flag2 = userDao.modifyMoney(collectId, money);
            System.out.println(flag2);
            // 自定义回滚的条件（有一个操作失败的情况下，前面的操作都要混滚）
            if(!flag2){
                // 如果 加钱 失败了，就回滚
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            }
        }catch(Exception e){
            e.printStackTrace();
            // 注意：如果异常在方法已经捕获了，对于事务 来说，你已经处理，我就不需要回滚
            // 手动 实现 事务回滚
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
        System.out.println("后续代码....");



        return true;
    }
}
